做到這裡會發現一件很可怕的事,因為我們的地板不是向官方範例的地形一樣用 staticGroup
產生的,所以他會被我們的主角推動,整個世界大亂啊QQ
Photo by Mehrpouya H on Unsplash
這時候我們因為不想讓樓梯被物理碰撞給推動,所以將樓梯的 body
裡面有一個 immovable
屬性改成 false
,並且讓樓梯只有上方可以碰撞,讓主角只有站在上面的可能性。
// 偵測物理碰撞的mapping物件
let groundCollision = {
none: false,
up: true,
down: false,
left: false,
right: false
};
...
// 將初始創立的樓梯都加上不被移動以及只有上方的物理碰撞偵測
grounds.getChildren().forEach((el) => {
el.body.immovable = true;
el.body.checkCollision = groundCollision;
});
也要讓新產生的樓梯也有這樣的效果,所以也要記得加上去喔!
grounds.getChildren().forEach((el) => {
if (el.y < 0) {
el.destroy();
ground = grounds
.create(
Phaser.Math.Between(0, 600),
Phaser.Math.Between(1200, 1250),
"ground"
)
.setScale(0.5);
//加上不被移動以及只有上方的物理碰撞偵測
ground.body.immovable = true;
ground.body.checkCollision = groundCollision;
}
});
我們大致的已經可以讓遊戲順順地進行囉!
已經可以自由移動,樓梯也會慢慢的上升了,越來越有下樓梯的 feel 了!
但是還沒有加上遊戲分數機制與結束的機制,那我們明天就先來設計遊戲結束的控制吧!
Phaser
Game
2020鐵人賽